let tokenLose = true;

// 基于uni.request的请求封装
function request(config) {
  return new Promise((resolve, reject) => {
    // 获取token
    const token = uni.getStorageSync('token');
    
    // 设置请求头
    const headers = {
      'Content-Type': contentType,
      ...config.headers
    };
    
    if (token) {
      headers['Authorization'] = 'Bearer ' + token;
    }
    
    // 是否静默处理错误（不显示toast）
    const silentError = config.silentError || false;
    
    // 构建完整URL
    const url = config.url.startsWith('http') ? config.url : baseURL + config.url;
    
    console.log('🌐 请求详情:', {
      method: config.method?.toUpperCase(),
      url: url,
      data: config.data || config.params,
      headers: headers
    });
    
    // 发送请求
    uni.request({
      url,
      method: config.method || 'GET',
      data: config.data || config.params,
      header: headers,
      timeout: requestTimeout,
      success: (response) => {
        console.log('🌐 响应详情:', {
          url: url,
          status: response.statusCode,
          data: response.data
        });
        
        const res = response.data;

        // 请求成功处理
        if (res.code === 200) {
          resolve(res);
          return;
        }
        
        // 请求出错处理
        if (res.code === 401) {
          // token过期或无权限
          if (tokenLose) {
            tokenLose = false;
            uni.showToast({
              title: '登录已过期，请重新登录',
              icon: 'none',
              duration: 2000
            });
            // 清除token并跳转到登录页
            uni.removeStorageSync('token');
            uni.removeStorageSync('user');
            setTimeout(() => {
              uni.reLaunch({
                url: '/pages/layout/index'
              });
            }, 2000);
          }
          reject(res);
          return;
        }
        // 其他错误
        if (res.msg && !silentError) {
          uni.showToast({
            title: res.msg,
            icon: 'none',
            duration: 2000,
            mask: true // 添加遮罩层，提高层级
          });
        }
        reject(res);
      },
      fail: (error) => {
        console.error('❌ 请求失败:', error);
        
        // 网络错误提示
        let errorMessage = '网络请求失败';
        if (error.errMsg) {
          if (error.errMsg.includes('timeout')) {
            errorMessage = '请求超时，请重试';
          } else if (error.errMsg.includes('fail')) {
            errorMessage = '网络连接失败';
          } else {
            errorMessage = error.errMsg;
          }
        }
        
        uni.showToast({
          title: errorMessage,
          icon: 'none',
          duration: 2000,
          mask: true // 添加遮罩层，提高层级
        });
        reject({
          ...error,
          message: errorMessage
        });
      }
    });
  });
}

export default request;